﻿#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//int main()
//{
//	const int a = 10;
//	a = 20;
//	printf("%d\n", a);
//}

//int main()
//{
//	const int a = 10;
//	//a = 20;
//	int* pa = &a;
//	*pa = 20;
//	printf("%d\n", a);
//}

//int main()
//{
//	const int a = 10;
//	int b = 20;
//	const int* pa = &a;//const放在*左边限制*pa,
//	//*pa = 20;//err
//	pa = &b;
//
//	printf("%d\n", a);
//}

//int main()
//{
//	const int a = 10;
//	int b = 20;
//	int* const pa = &a;//const放在*右边限制pa
//	*pa = 20;
//	//pa = &b;//err
//	printf("%d\n", a);
//}

//int main()
//{
//	int* pa;
//	*pa = 10;
//
//	return 0;
//}

//int main()
//{
//	int arr[5] = { 1,2,3,4,5 };
//	int* p = arr;
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	for (int i = 0; i < sz; i++)
//	{
//		printf("%d ", *p);
//		p++;
//	}//循环到第6次时，p就是野指针了
//	return 0;
//}

//int* test()
//{
//	int n = 20;
//	return &n;//已返回
//}
//int main()
//{
//	int* p = test();
//	printf("hh\n");
//	printf("%d", *p);//已经是野指针
//	return 0;
//}

//int main()
//{
//	int num = 10;
//	int* p1 = &num;
//	int* p2 = NULL;
//
//	return 0;
//}

//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int* p = &arr[0];
//	for (int i = 0; i < 10; i++)
//	{
//		*(p++) = i;
//	}
//	//此时p已经越界，可以把p设为NULL 
//	p = NULL;
//	//再次使⽤，判断p不为NULL的时候再使⽤ 
//	p = &arr[0];//重新让p获得地址 
//	if (p != NULL) //判断 
//	{
//		//...
//	}
//	return 0;
//}

//err
//int* test()
//{
//	int n = 20;
//	return &n;//返回局部变量的地址
//}
//int main()
//{
//	int* p = test();
//	printf("hh\n");
//	printf("%d", *p);//已经是野指针
//	return 0;
//}

//ok
//int test()
//{
//	int n = 20;
//	return n;//已返回
//}
//int main()
//{
//	int p = test();
//	printf("%d", p);
//	return 0;
//}


//#define NDEBUG
//#include <assert.h>


//int main()
//{
//	int a = 0;
//	int* pa = NULL;
//	//assert(pa != NULL);
//	assert(a == 1);
//	printf("%d", *pa);
//	return 0;
//}


//#include<assert.h>
//size_t my_strlen(const char* str)//更加安全
//{
//	size_t count = 0;
//	assert(str != NULL);//更健壮
//	while (*str != '\0')
//	{
//		count++;
//		str++;
//	}
//	return count;
//}
//int main()
//{
//	char arr[] = "asdfgjkl";
//	size_t len = my_strlen(arr);
//	printf("%zu", len);
//	return 0;
//}


//void swap(int x, int y)
//{
//	int z = 0;
//	x = y;
//	y = x;
//}
//int main()
//{
//	int a = 10;
//	int b = 20;
//	printf("交换前：a=%d b=%d\n", a, b);
//	swap(a, b);
//	printf("交换后：a=%d b=%d\n", a, b);
//
//	return 0;
//}


void swap(int* x, int* y)
{
	int z = 0;
	z = *x;
	*x = *y;
	*y = z;
}
int main()
{
	int a = 10;
	int b = 20;
	printf("交换前：a=%d b=%d\n", a, b);
	swap(&a, &b);
	printf("交换后：a=%d b=%d\n", a, b);

	return 0;
}